package traveldream.ejb.entities;

import java.io.Serializable;
import java.lang.String;


import java.util.List;

import javax.persistence.*;

/**
 * Entity implementation class for Entity: Pacchetto
 * RAPPRESENTA UN PACCHETTO PREDEFINITO 
 */
@Entity
@Table(name="PACCHETTO")
@NamedQueries({ @NamedQuery(name= Pacchetto.FIND_ALL, query="SELECT p FROM Pacchetto p"),
	@NamedQuery(name= Pacchetto.FIND_BY_DESTINAZIONE, query = "SELECT p FROM Pacchetto p WHERE p.citta = :citta"),
	@NamedQuery(name= Pacchetto.FIND_IN_VETRINA, query = "SELECT p FROM Pacchetto p WHERE p.inVetrina = true"),
	@NamedQuery(name = Pacchetto.FIND_BY_VOLO, query = "SELECT p FROM Pacchetto p WHERE p.voloAndata.voloID = :voloID OR p.voloRitorno.voloID = :voloID"),
	@NamedQuery (name = Pacchetto.FIND_BY_HOTEL, query = "SELECT p FROM Pacchetto p JOIN p.hotels h WHERE h.hotelID = :hotelID"),
	@NamedQuery (name = Pacchetto.FIND_BY_ESCURSIONE, query = "SELECT p FROM Pacchetto p JOIN p.escursioni e WHERE e.escursioneID = :escursioneID")
})
public class Pacchetto implements Serializable {

	//Utilizzabili dagli EJB per creare le queries
	public static final String FIND_ALL = "Pacchetto.findAll";
	public static final String FIND_BY_DESTINAZIONE = "Pacchetto.findByDestinazione";
	public static final String FIND_IN_VETRINA = "Pacchetto.findInVetrina";
	public static final String FIND_BY_VOLO = "Pacchetto.findByVolo";
	public static final String FIND_BY_HOTEL = "Pacchetto.findByHotel";
	public static final String FIND_BY_ESCURSIONE = "Pacchetto.findByESCURSIONE";
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int pacchettoID;
	private String citta;
	private boolean inVetrina;
	
	private static final long serialVersionUID = 1L;

	//relazioni verso HOTEL, VOLO (2), ESCURSIONE
	@ManyToMany(cascade=CascadeType.PERSIST)
	@JoinTable(name="PACCHETTO_ESCURSIONE", 		
		joinColumns={@JoinColumn(name="PACCHETTOID", referencedColumnName="PACCHETTOID")},
		inverseJoinColumns={@JoinColumn(name="ESCURSIONEID", referencedColumnName="ESCURSIONEID")}
		)
	private List<Escursione> escursioni;
	
	@ManyToOne(cascade=CascadeType.PERSIST)
    private Volo voloAndata;
	
	@ManyToOne(cascade=CascadeType.PERSIST)
    private Volo voloRitorno;
	
	@ManyToMany(cascade=CascadeType.PERSIST)
	@JoinTable(name="PACCHETTO_HOTEL", 		
		joinColumns={@JoinColumn(name="PACCHETTOID", referencedColumnName="PACCHETTOID")},
		inverseJoinColumns={@JoinColumn(name="HOTELID", referencedColumnName="HOTELID")}
		)
	private List<Hotel> hotels;
	
	
	//costruttore default
	public Pacchetto() {
		super();
	}
	
	//getters e setters
	public int getPacchettoID() {
		return this.pacchettoID;
	}

	public void setPacchettoID(int pacchettoID) {
		this.pacchettoID = pacchettoID;
	}   
	
	public String getCitta() {
		return this.citta;
	}

	public void setCitta(String citta) {
		this.citta = citta;
	}   
	
	public boolean getInVetrina() {
		return this.inVetrina;
	}

	public void setInVetrina(boolean inVetrina) {
		this.inVetrina = inVetrina;
	}

	public List<Escursione> getEscursioni() {
		return escursioni;
	}

	public void setEscursioni(List<Escursione> escursioni) {
		this.escursioni = escursioni;
	}

	public Volo getVoloAndata() {
		return voloAndata;
	}

	public void setVoloAndata(Volo voloAndata) {
		this.voloAndata = voloAndata;
	}

	public Volo getVoloRitorno() {
		return voloRitorno;
	}

	public void setVoloRitorno(Volo voloRitorno) {
		this.voloRitorno = voloRitorno;
	}

	public List<Hotel> getHotels() {
		return hotels;
	}

	public void setHotels(List<Hotel> hotels) {
		this.hotels = hotels;
	}
	
}
